package day06;

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.Arrays;
import java.util.Date;
import java.util.Random;
/*
定义方法：public static 修饰符 返回值类型（无返回值void） 方法名（小驼峰） 形参 方法体 返回值；位置在类中 和其他方法并列
return 返回值给调用方 结束方法（无论处于几层循环）
方法可以嵌套调用
方法签名 是方法名 和 形参 方法签名不能相同，故重载出现了，方法名相同，但是形参不同。

方法签名除了重载形式，其他模式都会报错。

特殊情况 overloading 当方法名和形参相同 （方法签名相同）顺序不同 也算重载
 */
public class Methoddemo {
    //定义一个方法，接收两个整数参数，返回它们的和。
    public static int sumtwoNumbers(int num1,int num2){
        return num1+num2;
    }
    //定义一个方法，接收一个整数参数，返回一个布尔值，表示该整数是否为偶数。
    public static boolean judgeEvenNumber(int integer){

        if (integer%2==0){
            return true;
        }
        return false;
    }
    //定义一个方法，接受一个整数数组的长度和数组元素范围，返回该长度和在指定范围内的一个随机数组。
    public static int[] generateArray(int length,int range){
        int[] arr = new int[length];
        Random random = new Random();
        for (int i = 0; i < length; i++) {
            arr[i] = random.nextInt(range+1);
        }
        return arr;
    }
    //定义一个方法，接收一个整数数组参数，返回该数组中所有元素的平均值。
    public static double getArrayAverage(int[] arr){
        int sum=0;
        for (int num:arr){
            sum+=num;
        }
        return (double)sum/arr.length;
    }
    //定义一个方法，接收一个整数数组作为参数，返回该数组中的最大值。
    public static int getArrayMax(int[] arr){
        Arrays.sort(arr);
        int max =arr[arr.length-1];
        return max;
    }
    //定义一个方法，接收一个字符串作为参数，返回一个布尔值，表示该字符串是否为回文（正着读和倒着读都一样）。
    public static boolean isPalindrome(String str){
        int left = 0;
        int right = str.length()-1;
        while (left<right){
            if (str.charAt(left)!=str.charAt(right)){
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
    //定义一个方法，接收两个日期作为参数，返回这两个日期之间的天数差。
    public static long daysBetween(LocalDate date1,LocalDate date2){
        return java.time.temporal.ChronoUnit.DAYS.between(date1,date2);
    }



    public static void main(String[] args) {
        System.out.print("求两数之和的方法调用：");
        int result = sumtwoNumbers(3,5);
        System.out.println("两数之和为："+result);
        System.out.print("判断是否为偶数的方法调用：");
        boolean b = judgeEvenNumber(8);
        System.out.println(b);
        System.out.print("随机生成数组方法调用：");
        int[] arr0 = generateArray(10,100);
        System.out.println(Arrays.toString(arr0));
        System.out.print("求数组平均值方法调用：");
        int[] arr1 = {1,2,3,4};//10/4
        double average = getArrayAverage(arr1);
        System.out.println(average);
        System.out.print("求数组最大值方法调用：");
        System.out.println(getArrayMax(arr0));;
        System.out.print("是否回文方法调用：");
        System.out.println(isPalindrome("hjjjjhh"));
        System.out.print("天数差方法调用：");
        LocalDate date1 = LocalDate.of(2023,12,4);
        LocalDate date2 = LocalDate.of(2024,12,1);
        System.out.println(daysBetween(date1,date2));

    }
}
